package com.itheima.hello.hello入门进阶.HelloWord基础知识;

public class HelloWorld {
    public static void main(String[] args) {
//第一节（ctrl + shift + / : 添加或者取消多行注释）
/*        System.out.println("HelloWorld!");
        System.out.println(1*2+3+4);
        String a = 1>2?"yes":"no";//三元运算符，三目运算符
        String b = 1<2?"对":"错";
        System.out.println(a);
        System.out.println(b);
        int i = 0;
        System.out.println(i++);//i=1但是先打印i=0
        System.out.println(++i);*/
//第二节
/*

        1.整数
        System.out.println(666);
        System.out.println('a'); //字符用单引号
        System.out.println("abed"); //字符串用双引号
        System.out.println(' '); //空字符用单引号
        System.out.println('中');
        System.out.println('\n'); //换行
        System.out.println("中国");
        System.out.println('\t'); //缩进
        System.out.println("  ");//空字符也可以用双引号
        System.out.println(true); //真
        System.out.println(false);//假
*/
//第三节
/*
        int age = 23; //每一行都需要用分号结束
        System.out.println(age);
        double score = 99.5;
        System.out.println(score);
        System.out.println("-----------------");
        int age2 = 19; // 赋值
        System.out.println(age2);
        age2 = age2 + 2; //赋值
        System.out.println(age2);
        age2 += 3;  //赋值
        System.out.println(age2);
        int a = 'a';
        System.out.println(a); //类型转换  a = 97
        */
//第四节
/*
        // 怎么实现输入0退出整个循环????
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请输入今天是星期几(输入{}退出):");
            String week = sc.next();

            if (week != "0") {
                switch (week) {
                    case "星期一":
                        System.out.println("今天搞学习;");
                        break;
                    case "星期二":
                        System.out.println("今天追剧;");
                        break;
                    case "星期三":
                        System.out.println("今天敲代码;");
                        break;
                    case "星期四":
                        System.out.println("今天出去玩；");
                        break;
                    case "星期五":
                        System.out.println("今天休息;");
                        break;
                    case "星期六":
//                    System.out.println("今天敲代码;");
//                    break;      //switch 条件穿透
                    case "星期七":
                        System.out.println("今天敲代码;");
                        break;         //星期六和星期七共用一个条件
                    default:
                        System.out.println("你输入的星期不正确!请重新输入!");
                }
            }
            else{
                break;
        }
        }

        int i = 1;
        do{
            System.out.println("第" + i + "遍" + "Hello World!"); //先执行一遍循环体，再判断条件, 循环体至少执行一遍
            i++;
        }while (i <= 3);


        do{
            System.out.println("你好!");  //死循环
        }while (true);*/
//第五节
/*
        int[] a = {18, 20, 21, 22 ,23, 19, 30, 24, 45};
        String[] n = {"张三", "李四", "王五", "小明", "王麻子", "小红", "小刚", "小强", "老王"};
        System.out.println("数组a的索引长度为:" + a.length);
        System.out.println("数组n的索引长度为:" + n.length);
        for (int i = 0; i < a.length; i++) {
                System.out.println(n[i] + "的年龄为:" + a[i]);
            }*/
//第六节 评委打分
/*
        System.out.println("当前选手得分是:" + GetAvg(5));}
        Scanner sc = new Scanner(System.in);  //实例化一个扫描器对象
        double[] scores = new double[6];
        double sum = 0;
        for(int i = 0; i < scores.length; i++) {
            System.out.println("请输入第" + (i+1) + "个评委的分数:");
            scores[i] = sc.nextDouble();     //输入分数 用double类型
            sum += scores[i];
        }
        System.out.println("该选手的最终的分是:" + sum / scores.length); //六名评委总评分的平均分*/
//第七节 随机生成验证码
/*        Scanner sc = new Scanner(System.in);
        System.out.println("你想生成随机验证码的位数:");
        int n = sc.nextInt();
        creatCode(n);*/
//第八节 数字加密
/*        Scanner sc = new Scanner(System.in);
        while (true){
            System.out.println("请输入需要加密的四位数字(输入1即可退出):");
            int n = sc.nextInt();
            if (n == 1) {
                break;
            }
            if (1000 <= n && n <= 9999 || n == 0000){
                encrypt(n);
            }
            else {
                System.out.println("输入数字不足或超过4位");
            }}*/
//第九节
/*
        //数组拷贝:两个数组在堆内存中的存储地址不一样且数组是一样的，说明数组拷贝成功
        int[] a = {11,22,33,4423,654,122,6745};
        System.out.println("原数组的地址为:" + a);
        System.out.print("原数组为:");
        write(a);
        System.out.println("----------------------------------");
        int[] b = copy(a);
        System.out.print("拷贝后的数组为:");
        write(b);*/
//第十节
/*        //双色球红球：1-33之间的数,且不能重复   蓝球 ；1-16之间的整数 (前六个为输入红球号码。最后一个为输入蓝球号码)
        int[] num = userSelection();
        System.out.println("您投注的号码为:");
        write(num);
        System.out.println("中奖号码为:");
        int[] lucknum = rd();
        write(lucknum);
        judge(lucknum, num);*/
//九九乘法表
/*
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + " * " + i + " = " + (j*i) + );
            }
            System.out.println("\t");
        }

 */
}     //main方法结尾

//方法里面不能嵌套方法,以下定义的是前面每一节使用到的方法

//第六节方法
/*
       public static double GetAvg(int num){
        //动态初始化一个分数数组，分数为[0-100]的整数,数组默认值为0
        //加入num=5 , 则score=[0,0,0,0,0,]
        int[] scores = new int[num];
        Scanner sc = new Scanner(System.in); //实例化一个扫描器
        for (int i = 0; i < scores.length; i++) {
            System.out.println("请输入第"+ (i+1) + "个评委的打分");
            int score = sc.nextInt(); //输入每个评委的打分
            scores[i] = score; //把当前位置的评委的打分填入数组
        }
        int sum =0;//求总分
        int max = scores[0];//求最大分数
        int min = scores[0]; //求最小分数

        for (int i = 0; i < scores.length; i++) {
            int score = scores[i];
            //求和
            sum += scores[i];
            //求最大值
            if (max <= score){
                max = score;
            }
            //求最小值
            if (min >= score){
                min = score;
            }
        }
        return 1.0 * (sum - max - min) / (num - 2);}
        //求去掉最大值和最小值后的平均分, 乘以1.0是因为前面是整形除以整形，
        // 结果也会是整形，所以乘以1.0保留以为小数
*/
//第七节方法
/*    public static String creatCode(int n){
        Random r = new Random();
        String s = "";
        //用于控制生成多少位随机字符
        for (int i = 1; i <= n; i++) {
            // 每循环一次代表一位验证码
            //0:随机生成0-9数字，1:生成随机大写字母，2:生成随机小写字母,随机生成0-2的一个数:即在该位置上随机生成一种情况
            int type = r.nextInt(3);
            switch (type){
                case 0:
                    //0:随机生成0-9数字
                    s += r.nextInt(10);
                    break;
                case 1:
                    //1:生成随机大写字母
                    //65-91: A-Z; (char)(r.nextInt(65,92)):把生成的随机整数类型强制转化为字符类型
                    char num = (char)(r.nextInt(65,92));
                    s += num;
                    break;
                case 2:
                    //2:生成随机小写字母
                    char num1 = (char)(r.nextInt(97, 124)); //97-123: a-z
                    s += num1;
                    break;
            }
        }
        System.out.println("生成" + n + "位随机验证码:" + s); //打印随机验证码
        return s;}*/
//第八节方法
/*    public static String encrypt(int n){
    //拆分密码  例如1983
    int[] num = split(n);
    //加密
    for (int i = 0; i < num.length; i++) {
        num[i] = (num[i] + 5) % 10;
    }
    //翻转数组
    reverse(num);
    //翻转后便利出来再拼接成字符串
    String data = "";
    for (int i = 0; i < num.length; i++) {
        data += num[i];
    }
    System.out.println("加密后的数据为:" + data);
    return data;}
  //翻转数组不需要返回值，实现翻转即可
    public static void reverse(int[] num) {
        //[1,2.3,4]==>>[4,3,2,1]==>>index=0,1,2,3即num.length - 1
        //              i     j
        for (int i = 0, j = num.length - 1; i < j; i++, j--){
            //利用临时变量实现元速率调换
            int temp = num[i];
            num[i] = num[j];
            num[j] = temp;
        }
    }
    public static int[] split(int n) {
        //假设=1983，四位数
        int[] num = new int[4];//动态初始化一个长度为4的数组
        num[0] = n / 1000;
        num[1] = n % 1000 / 100;
        num[2] = n % 100 / 10;
        num[3] = n % 10;
        return num;
        }*/
//第九节方法
/*    public static int[] copy(int[] a){
        int[] b = new int[a.length];
        for (int i = 0; i < a.length; i++) {
            b[i] = a[i];
        }
        System.out.println("拷贝后的数组地址为:" + b);
        return b;
}
    //打印数组的函数
    public static void write(int[] b){
        System.out.print('[');
        for (int i = 0; i < b.length; i++) {
            //字节没有拼接，字符创才有拼接, 所以b[i]和 ','拼接需要使用 "",而不是''
            //System.out.print(b[i] + ',');当b[i]为整数类型时，会发生数据类型隐式转化，即打印出b[i]与','所对应的数值进行相加
            //显性转化: 数据类型强制转化
            //隐式转化: 数据类型自动转化
            System.out.print(i == b.length -1 ? b[i] : b[i] + ",");//**不能随便使用','
        }                                                         //这里本来需要字符串拼接使用会导致发生隐式转化
        System.out.println(']');
        }*/
//第十节方法
/*    //这部分数用户输入号码的业务功能
    //1.打印数组
    public static void write ( int[] num){
        System.out.print("[");
        for (int i = 0; i < num.length; i++) {
            System.out.print(i == num.length - 1 ? num[i] : num[i] + ", ");
        }
        System.out.println("]");
    }
    //2.用户输入
    public static int[] userSelection () {
        Scanner sc = new Scanner(System.in);
        int[] num = new int[7]; //[0,0,0,0,0,0,0]
        for (int i = 0; i < num.length - 1; i++) {
            while (true) {
                System.out.println("请输入第" + (i + 1) + "个红球号码(1-33):");
                int usernum = sc.nextInt();
                if (usernum < 1 || usernum > 33) {
                    System.out.println("您输入的号码有误,请输入1-33的号码！");
                    continue;
                } else if (!exist(num, usernum)) {
                    num[i] = usernum;
                    break;
                } else {
                    System.out.println("您输入的红色号码重复了,请重新输入");
                    continue;
                }
            }
        }
        //判断蓝色球并且添加进数组
        while (true) {
            System.out.println("请输入您的蓝色号码(1-16):");
            int usernum = sc.nextInt();
            if (usernum < 1 || usernum > 16) {
                System.out.println("您输入的蓝色号码有误，请重新输入1-16的蓝色号码");
                continue;
            } else {
                num[6] = usernum;
                break;
            }
        }
        return num;
    }
    //3.判断是否重复
    public static boolean exist ( int[] num, int usernum){
        for (int i = 0; i < num.length - 1; i++) {
            if (num[i] == usernum) {
                return true;
            }
        }
        return false;
    }

    //这部分是随机生成中奖幸运号码的业务功能
    public static int[] rd () {
        Random r = new Random();//实例化一个随机数
        int[] lucknum = new int[7]; //[0,0,0,0,0,0,0]
        for (int i = 0; i < lucknum.length - 1; i++) { //随机生成1-33的红色中奖号码
            while (true) {
                int n = r.nextInt(1, 34);
                if (!exist(lucknum, n)) {
                    lucknum[i] = n;
                    break; //如果生成的这个数没重复则跳出此次死循环
                }
            }
        }
        lucknum[6] = r.nextInt(1, 17);//双随机生成一个1-16的蓝色中奖号码
        return lucknum;
    }

    //这部分是判断用户的中奖情况并且返回中奖信息
    public static void judge ( int[] lucknum, int[] num){
        int red = 0;
        int blue = 0;
        for (int i = 0; i < num.length - 1; i++) {
            if (lucknum[i] == num[i]) {
                red++;
            }
        }
        if (lucknum[6] == num[6]) {
            blue++;
        }
        if (red == 6 && blue == 1) {
            System.out.println("您命中了" + red + "个红球，" + blue + "个蓝球");
            System.out.println("恭喜您获得本次双色球一等奖:1000万软妹币");
        }
        if (red == 6 && blue == 0) {
            System.out.println("您命中了" + red + "个红球，" + blue + "个蓝球");
            System.out.println("恭喜您获得本次双色球二等奖奖:500万软妹币");
        }
        if (red == 5 && blue == 1) {
            System.out.println("您命中了" + red + "个红球，" + blue + "个蓝球");
            System.out.println("恭喜您获得本次双色球三等奖奖:3000元软妹币");
        }
        if (red == 5 && blue == 0 || red == 4 && blue == 1) {
            System.out.println("您命中了" + red + "个红球，" + blue + "个蓝球");
            System.out.println("200元");
        }
        if (red == 4 && blue == 0 || red == 3 && blue == 1) {
            System.out.println("您命中了" + red + "个红球，" + blue + "个蓝球");
            System.out.println("10元");
        }
        if (red < 3 && blue == 1) {
            System.out.println("您命中了" + red + "个红球，" + blue + "个蓝球");
            System.out.println("5元");
        } else {
            System.out.println("很遗憾本期双色球你没有中奖,感谢您为慈善事业做出贡献~~~~");
        }
    }*/
}   //类结尾



























